"""
生成随机中文方法
1、先调用faker
2、写出一个radom_name方法
3、写出一个方法需要调用radom_name
4、针对第三个 方法 eval(方法名）也会及逆行执行这个方法

"""

from faker import Faker
from faker.generator import random

fake = Faker(locale="zh-CN")  # 自动生成的字符串转换为中文


def func_yaml(data):
    if isinstance(data, dict):  # 判断是否data是字典格式，如果是字典格式执行下面操作
        for key, value in data.items():  # 遍历字典中的key和value值  在data里面
            if '${' and '}' in str(value):  # 如果${}在value里面
                start = str(value).index('${')  # 取值下标第几个 返回值是0
                end = str(value).index('}')  # 取值下标第几个 返回值是15
                func_value = str(value)[start + 2:end]  # 开始+2后取值等于 :random_name() 获取下标2-15
                #  str(value)[0:start]指的是从0开始取值到$
                # 后面下标str(value)[end:len(str(value))] end是 }后一直取值到最后 len是查询有多少位
                data[key] = str(value)[0:start]+str(eval(func_value))+str(value)[end+1:len(str(value))] # eval
                # 就是一个表达式，value结果就等于random_name 就调用了下面的方法
        return data


def random_name():
    return fake.name()  # 固定函数用法，生成中文名字


def age():
    print(random.randint(10, 100))
    return random.randint(10, 100)  # 传值是10-100的随机数


if __name__ == '__main__':
    data = {'name': '北京-${random_name()}-测试', 'age': '${age()}', 'sex': '女'}
    print(func_yaml(data))
    # print(random.randint(10, 100))
